package com.imooc.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 用AOP获取接口执行时间
 * @author liansen
 * @create 02-14-15:26
 */

@Slf4j
@Component
@Aspect //定义切面
public class ServiceTimeAspect {

    //定义切点 这里的service是因为api模块中没有service包，idea的识别问题，不用管
    @Pointcut("execution(* com.imooc.service.impl..*.*(..))")
    public void myPointCut(){

    }

    //环绕通知
    @Around(value = "myPointCut()")
    public Object castTime(ProceedingJoinPoint joinPoint) throws Throwable {

        //获取类名
        String className = joinPoint.getTarget().getClass().getName();
        //获取方法名
        String methodNmae = joinPoint.getSignature().getName();

        //系统当前时间 (单位: 毫秒)
        long begin = System.currentTimeMillis();

        //继续执行目标方法
        Object proceed = joinPoint.proceed();

        long end = System.currentTimeMillis();

        long castTime = end - begin;

        log.info( className +"类中的"+ methodNmae + "方法耗费了: " + castTime + "毫秒");

        return proceed;
    }
}
